`:top
A `!software component`! is a `F33f`_`[modular`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Modular_design]`_`f unit of `F33f`_`[software`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Software]`_`f that `F33f`_`[encapsulates`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Separation_of_concerns]`_`f specific functionality.`:cite-ref-pandey-1-0[`F5bf`_`[1`#cite-note-pandey-1]`_`f] The desired characteristics of a component are `F33f`_`[reusability`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Reusability]`_`f and `F33f`_`[maintainability`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Maintainability]`_`f.`:cite-ref-pandey-1-1[`F5bf`_`[1`#cite-note-pandey-1]`_`f]
>>Contents
• `F0af`_`[Value`#value]`_`f
• `F0af`_`[Attributes`#attributes]`_`f
• `F0af`_`[Third-party`#third-party]`_`f
• `F0af`_`[Component-based software engineering`#component-based-software-engineering]`_`f
• `F0af`_`[Framework`#framework]`_`f
• `F0af`_`[Modeling`#modeling]`_`f
• `F0af`_`[History`#history]`_`f
• `F0af`_`[References`#references]`_`f
-─
>>Value
Components allow `F33f`_`[software development`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Software_development]`_`f to assemble software with reliable parts rather than writing `F33f`_`[code`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Source_code]`_`f for every aspect; allowing for `F33f`_`[implementation`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Systems_development_life_cycle]`_`f to be more like factory assembly than custom building.
>>Attributes
Desirable attributes of a component include but are not limited to:
• `F33f`_`[Cohesive`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Cohesion_(computer_science)]`_`f – `F33f`_`[encapsulates`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Encapsulation_(computer_programming)]`_`f related `F33f`_`[functionality`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Function_(computer_science)]`_`f
• `F33f`_`[Reusable`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Reusability]`_`f
• `F33f`_`[Robust`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Robustness_(computer_science)]`_`f
• `*Substitutable`* – can be replaced by another component with the same interface
• `F33f`_`[Documented`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Software_documentation]`_`f
• `F33f`_`[Tested`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Software_testing]`_`f
>>Third-party
Some components are built in-house by the same organization or team building the `F33f`_`[software system`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Software_system]`_`f. Some are `F33f`_`[third-party`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Third-party_software_component]`_`f, developed elsewhere and assembled into the software system.`:cite-ref-2[`F5bf`_`[2`#cite-note-2]`_`f]
>>Component-based software engineering
For large-scale systems, `F33f`_`[component-based development`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Component-based_software_engineering]`_`f encourages a disciplined process to manage `F33f`_`[complexity`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Programming_complexity]`_`f.`:cite-ref-3[`F5bf`_`[3`#cite-note-3]`_`f]
>>Framework
Some components conform to a framework technology that allows them to be consumed in a well-known way. Examples include: `F33f`_`[CORBA`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Common_Object_Request_Broker_Architecture]`_`f, `F33f`_`[COM`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Component_Object_Model]`_`f, `F33f`_`[Enterprise JavaBeans`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Enterprise_JavaBeans]`_`f, and the `F33f`_`[.NET Framework`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=.NET_Framework]`_`f.`:cite-ref-4[`F5bf`_`[4`#cite-note-4]`_`f]`:cite-ref-5[`F5bf`_`[5`#cite-note-5]`_`f]
>>Modeling
Component design is often modeled visually. In `F33f`_`[Unified Modeling Language`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Unified_Modeling_Language]`_`f (UML) 2.0 a component is shown as a rectangle, and an interface is shown as a lollipop to indicate a provided interface and as a socket to indicate consumption of an interface.
>>History
The idea of `F33f`_`[reusable`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Reusability]`_`f software components was promoted by `F33f`_`[Douglas McIlroy`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Douglas_McIlroy]`_`f in his presentation at the `F33f`_`[NATO Software Engineering Conference`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=NATO_Software_Engineering_Conferences]`_`f of 1968.`:cite-ref-6[`F5bf`_`[6`#cite-note-6]`_`f] (One goal of that conference was to resolve the so-called `F33f`_`[software crisis`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Software_crisis]`_`f of the time.) In the 1970s, McIlroy put this idea into practice with the addition of the `F33f`_`[pipeline`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Pipeline_(Unix)]`_`f feature to the `F33f`_`[Unix`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Unix]`_`f `F33f`_`[operating system`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Operating_system]`_`f.
`F33f`_`[Brad Cox`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Brad_Cox]`_`f refined the concept of a software component in the 1980s.`:cite-ref-7[`F5bf`_`[7`#cite-note-7]`_`f] He attempted to create an infrastructure and market for reusable third-party components by inventing the `F33f`_`[Objective-C`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Objective-C]`_`f programming language.`:cite-ref-8[`F5bf`_`[8`#cite-note-8]`_`f]
`F33f`_`[IBM`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=IBM]`_`f introduced `F33f`_`[System Object Model`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=IBM_System_Object_Model]`_`f (SOM) in the early 1990s.`:cite-ref-claims-9-0[`F5bf`_`[9`#cite-note-claims-9]`_`f]
`F33f`_`[Microsoft`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Microsoft]`_`f introduced `F33f`_`[Component Object Model`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Component_Object_Model]`_`f (COM) in the early 1990s. Microsoft built many domain-specific component technologies on COM, including `F33f`_`[Distributed Component Object Model`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Distributed_Component_Object_Model]`_`f (DCOM), `F33f`_`[Object Linking and Embedding`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Object_Linking_and_Embedding]`_`f (OLE), and ActiveX.
>>References
`:cite-note-pandey-1`!1.`! `F0af`_`[↑`#cite-ref-pandey-1-0]`_`f `:citerefpandey2023`aPandey, Pankaj (11 July 2023). "Tutorial notes: Software Components and Connectors". `*medium.com`*. Retrieved 14 May 2024.
`:cite-note-2`!2.`! `F0af`_`[↑`#cite-ref-2]`_`f `:citerefyadav2024`aYadav, Sunny (16 April 2024). "Types of Software Components — With Examples". `*`F33f`_`[LinkedIn`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=LinkedIn]`_`f`*. Retrieved 14 May 2024.
`:cite-note-3`!3.`! `F0af`_`[↑`#cite-ref-3]`_`f `:citerefdouglas-c-schmidt`a`F33f`_`[Douglas C. Schmidt`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Douglas_C._Schmidt]`_`f. "Why Software Reuse has Failed and How to Make It Work for You". Retrieved 14 May 2024.
`:cite-note-4`!4.`! `F0af`_`[↑`#cite-ref-4]`_`f `:citerefcrnkovicsentillesvulgarakischaudron2011`aCrnkovic, I.; Sentilles, S.; Vulgarakis, A.; Chaudron, M. R. V. (2011). "A Classification Framework for Software Component Models". `*IEEE Transactions on Software Engineering`*. `!37`! (5): 593–615. `F33f`_`[doi`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Doi_(identifier)]`_`f:10.1109/TSE.2010.83. `F33f`_`[S2CID`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=S2CID_(identifier)]`_`f 15449138.
`:cite-note-5`!5.`! `F0af`_`[↑`#cite-ref-5]`_`f `:citereflauwang2007`aLau, Kung-Kiu; Wang, Zheng (2007). "Software Component Models". `*IEEE Transactions on Software Engineering`*. `!33`! (10): 709–724. `F33f`_`[doi`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Doi_(identifier)]`_`f:10.1109/TSE.2007.70726. `F33f`_`[ISSN`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=ISSN_(identifier)]`_`f 0098-5589.
`:cite-note-6`!6.`! `F0af`_`[↑`#cite-ref-6]`_`f `:citerefmcilroy1969`aMcIlroy, Malcolm Douglas (January 1969). "Mass produced software components" (PDF). `*Software Engineering: Report of a conference sponsored by the NATO Science Committee, Garmisch, Germany, 7-11 Oct. 1968`*. Scientific Affairs Division, NATO. p. 79.
`:cite-note-7`!7.`! `F0af`_`[↑`#cite-ref-7]`_`f `:citerefrainer-niekamp`aRainer Niekamp. "Software Component Architecture" (PDF). Gestión de Congresos - CIMNE/Institute for Scientific Computing, TU Braunschweig. p. 4. Archived from the original (PDF) on 2012-03-28. Retrieved 2011-07-29. The modern concept of a software component largely defined by Brad Cox of Stepstone, => Objective-C programming language
`:cite-note-8`!8.`! `F0af`_`[↑`#cite-ref-8]`_`f `:citerefbrad-cox1991`a`F33f`_`[Brad Cox`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Brad_Cox]`_`f (1991). `*Object Oriented Programming: An Evolutionary Approach`*. Addison Wesley. `F33f`_`[ISBN`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=ISBN_(identifier)]`_`f 0-201-54834-8.
`:cite-note-claims-9`!9.`! `F0af`_`[↑`#cite-ref-claims-9-0]`_`f `:citerefraphael-gfeller2008`aRaphael Gfeller (December 9, 2008). "Upgrading of component-based application". HSR - Hochschule für Technik Rapperswill. p. 4. Retrieved 2011-07-29. 1990, IBM invents their System Object Model. 1990, as a reaction, Microsoft released OLE 1.0 OLE custom controls (OCX)
`c`F0af`_`[↑ Back to top`#top]`_`f`a